로딩 중이에요... 🐣
반복문과 while 반복문 | ✅ 저자: 이유정(박사)
🔹 while 반복문이란?
while은 조건이 True인 동안 계속해서 코드를 반복합니다.
조건이 False가 되면 반복이 멈춥니다.
조건이 계속 True이면 무한 반복(무한 루프)이 될 수 있으므로
반복을 종료시킬 코드도 꼭 함께 넣어야 합니다.
📖 문법, 구문(syntax): while 반복문 기본 문법
while 조건식:
실행할 코드
- 조건식이 True이면 실행할 코드가 반복됨
- 조건식이 False가 되면 반복 종료
</> 예시코드1: 숫자 0부터 4까지 출력
i = 0
while i < 5:
print(i)
i += 1
🖨️ 출력결과:
0
1
2
3
4
</> 예시코드2: 사용자 입력이 "exit"일 때 종료
while True: # 무한반복 조건
msg = input("입력하세요 (종료: exit): ")
if msg == "exit":
break
print("입력한 내용:", msg)
🖨️ 출력결과:
입력하세요 (종료: exit): hello
입력한 내용: hello
입력하세요 (종료: exit): exit
🔹 while 반복문: break 키워드 / continue 키워드
while이나 for 반복문 안에서 자주 사용되는 break와 continue
키워드는 반복 흐름을 중간에 끊거나 건너뛸 때 매우 유용합니다.
키워드 | 설명 |
---|---|
break |
반복문 전체를 즉시 종료하고 빠져나감 |
continue |
이번 반복만 건너뛰고, 다음 반복으로 바로 진행 |
이 두 키워드는 특정 조건일 때 반복 흐름을 유연하게 제어할 수 있게 해줍니다. |
</> 예시코드: break
로 음수 입력 시 반복 종료하기
while True:
num = int(input("양수를 입력하세요 (음수 입력 시 종료): "))
if num < 0:
print("음수를 입력했으므로 종료합니다.")
break
print("입력한 숫자:", num)
🖨️ 출력 결과 예시:
양수를 입력하세요 (음수 입력 시 종료): 5
입력한 숫자: 5
양수를 입력하세요 (음수 입력 시 종료): 10
입력한 숫자: 10
양수를 입력하세요 (음수 입력 시 종료): -1
음수를 입력했으므로 종료합니다.
🔍 해설:
while True
로 무한 반복 시작int(input(...))
으로 숫자 입력- 음수면
break
로 즉시 탈출 - 양수면 계속 반복
</> 예시코드1: 로그인 시도 3회 초과 시 강제 종료 (break
사용)
correct_pw = "python123"
attempts = 0 # 시도 횟수
while True:
pw = input("비밀번호를 입력하세요: ")
attempts += 1
if pw == correct_pw:
print("로그인 성공!")
break
else:
print("비밀번호가 틀렸습니다.")
if attempts >= 3:
print("3회 이상 실패. 계정이 잠겼습니다.")
break
🖨️ 출력 결과 예시 (사용자 입력 예시)
비밀번호를 입력하세요: abc
비밀번호가 틀렸습니다.
비밀번호를 입력하세요: 1234
비밀번호가 틀렸습니다.
비밀번호를 입력하세요: 1111
비밀번호가 틀렸습니다.
3회 이상 실패. 계정이 잠겼습니다.
또는 성공한 경우:
비밀번호를 입력하세요: python123
로그인 성공!
🔍 해설 리스트
-
break
는 두 가지 조건 중 하나일 때 사용됨:- 비밀번호가 맞으면 로그인 성공 후 종료
- 3번 실패하면 강제 종료
-
attempts
변수로 반복 횟수 제한을 구현 -
실제 로그인 시스템에서도 유사하게 사용됩니다
</> 예시코드2: continue
로 홀수만 출력하기
i = 0
while i < 10:
i += 1
if i % 2 == 0:
continue
print(i)
🖨️ 출력 결과:
1
3
5
7
9
🔍 해설:
i
가 짝수일 때continue
를 만나면print(i)
는 건너뜀- 짝수는 출력하지 않고, 홀수만 출력
</> 예시코드3: 학교에서 1번부터 5번까지 발표를 시키는데,
3번 친구는 아파서 발표를 건너뛰기로 했다고 생각해보세요.
i = 1 # 발표 번호 시작
while i <= 5:
if i == 3:
i += 1 # 무한 루프 방지! 증가 먼저
continue # 3번은 건너뛰고 다음 반복으로 넘어감
print(f"{i}번 학생 발표")
i += 1
🖨️ 출력결과:
1번 학생 발표
2번 학생 발표
4번 학생 발표
5번 학생 발표
</> 예시코드4: 위의 같은 내용을 for문으로 적용해 보겠습니다.
for i in range(1, 6): # 1부터 5까지를 의미며 끝값은 포함되지 않음
if i == 3:
continue
print(f"{i}번 학생 발표")
🖨️ 출력결과:
1번 학생 발표
2번 학생 발표
4번 학생 발표
5번 학생 발표
◽ for문과 while문의 간단한 정의 ❗
for
반복문은 리스트, 튜플, 문자열처럼 순서가 있는 자료를 하나씩 꺼내며 반복할 때 사용합니다.- 주로 반복 횟수가 정해져 있을 때 적합합니다.
- 반면,
while
반복문은 주어진 조건이 참(True
)인 동안 계속 반복됩니다. - 즉, 언제 끝날지 모르는 반복이 필요할 때 사용합니다.
📝 문제1] while
문으로 1부터 100까지 출력하다가 10이 되면 멈추게 코딩하세요.
✅ 정답 코드:
i = 1
while i <= 100:
if i == 10:
break
print(i)
i += 1
🖨️ 출력 결과:
1
2
3
4
5
6
7
8
9
🔍 해설:
i == 10
일 때break
가 실행되면서 반복 종료- 따라서 1부터 9까지만 출력됨
📝 문제2] 1부터 10까지 짝수만 출력해보세요 (continue
사용)
✅ 정답 코드:
i = 0
while i < 10:
i += 1
if i % 2 == 1:
continue
print(i)
🖨️ 출력 결과:
2
4
6
8
10
🔍 해설:
i % 2 == 1
→ 홀수일 경우continue
실행- 홀수는 건너뛰고, 짝수만 출력됨
📝 문제3] 사용자에게 숫자를 계속 입력받되,
짝수일 때만 "짝수입니다"를 출력하고, 0을 입력하면 종료하세요.
✅ 정답 코드:
while True:
num = int(input("숫자 입력 (0 입력 시 종료): "))
if num == 0:
break
if num % 2 == 1:
continue
print("짝수입니다.")
🖨️ 출력 결과 예시:
숫자 입력 (0 입력 시 종료): 3
숫자 입력 (0 입력 시 종료): 6
짝수입니다.
숫자 입력 (0 입력 시 종료): 7
숫자 입력 (0 입력 시 종료): 2
짝수입니다.
숫자 입력 (0 입력 시 종료): 0
🔍 해설:
break
: 0 입력 시 즉시 반복 종료continue
: 홀수일 경우 이후 코드를 건너뜀print()
는 짝수일 때만 실행
📝 문제 4] 짝수만 출력하기 (for
+ continue
활용)
1부터 10까지의 숫자 중 홀수는 건너뛰고, 짝수만 출력하세요.
continue
문을 꼭 활용하세요.
✨ 힌트:
i % 2 != 0
→ 홀수면continue
로 건너뜀- 짝수일 때만
print(i)
실행됨
✅ 정답 코드:
for i in range(1, 11):
if i % 2 != 0: # 10 / 2 ...나머지 10%2 ---> False
continue
print(i)
🖨️ 출력 결과:
2
4
6
8
10
📝 문제 5] 1~100 중 3의 배수이면서 5의 배수인 수의 합 구하기 1부터 100까지 중 3과 5의 공배수(즉, 15의 배수)의 합을 구하세요.
✨ 힌트:
15의 배수
는3의 배수이면서 5의 배수
- 누적 합은
+=
로 저장됨
✅ 정답 코드:
total = 0
for i in range(1, 101):
if i % 15 == 0:
total += i
print("합계:", total)
🖨️ 출력 결과:
합계: 315
📝 문제 6] 문자열 뒤집기 (for
반복)
사용자로부터 문자열을 입력받고, 이를 뒤집어서 한 글자씩 출력하세요.
(ex: "python" → n o h t y p)
✨ 힌트:
reversed()
는 문자열을 역순으로 반복 가능하게 만듬print(..., end=" ")
는 줄바꿈 없이 출력
✅ 정답 코드:
text = input("문자열 입력: ")
for char in reversed(text):
print(char, end=" ")
🖨️ 출력 결과:
n o h t y p
📝 문제 7] 무한 입력 받기 (while True
+ break
)
숫자를 계속 입력받다가, 0이 입력되면 종료하고
지금까지 입력한 숫자의 평균을 출력하세요.
✨ 힌트:
while True
로 무한 반복break
로 0 입력 시 탈출- 입력한 수의 총합과 개수로 평균 계산
✅ 정답 코드:
count = 0
total = 0
while True:
num = int(input("숫자 입력 (0 입력시 종료): "))
if num == 0:
break
count += 1
total += num
if count > 0:
print("평균:", total / count)
else:
print("입력된 숫자가 없습니다.")
🖨️ 출력 결과:
숫자 입력 (0 입력시 종료): 5
숫자 입력 (0 입력시 종료): 7
숫자 입력 (0 입력시 종료): 8
숫자 입력 (0 입력시 종료): 0
평균: 6.666666666666667
📝 문제 8] 2중 반복문으로 구구단 출력 (단짝 출력 제외)
2단부터 9단까지 구구단을 출력하되,
곱하는 수가 단과 같은 경우는 출력하지 마세요.
✨ 힌트:
dan == i
일 때continue
로 건너뜀- 각 단마다
---
로 구분
✅ 정답 코드:
for dan in range(2, 10):
for i in range(1, 10):
if dan == i:
continue
print(f"{dan} x {i} = {dan*i}")
print("---")
🖨️ 출력 결과:
2 x 1 = 2
2 x 3 = 6
...
3 x 1 = 3
3 x 2 = 6
3 x 4 = 12
...
---
🔹 범위
🔹 범위 함수 range()
란?
range() 함수는 숫자 범위를 생성할 때 사용하는 함수예요.
주로 for 반복문과 함께 사용해서 여러 번 반복할 때 씁니다.
예를 들어 range(5)는 0부터 4까지 총 5개의 숫자를 생성해줍니다.
기본적으로 0부터 시작하며, 끝 값은 포함하지 않아요!
📖 문법, 구문(syntax): 범위함수
range(시작값, 끝값, 증가/감소값)
- 시작값: 어디서부터 시작할지
- 끝값: 어디까지 갈지 (하지만 이 값은 포함되지 않음!**)
- 증가/감소값: 몇씩 더하거나 뺄지
💡 range()
함수는 시작값부터 끝값 '직전'까지 반복합니다.
즉, 끝값은 포함되지 않습니다!
🔹 for
반복문: 범위와 함께 사용하기
for 반복문은 range() 함수와 함께 사용할 때 정해진 횟수만큼
반복 작업을 수행할 수 있어요.
즉, range()가 숫자 범위를 만들어주고,
for는 그 숫자만큼 코드를 반복 실행해주는 역할을 해요.
</> 예시코드: for
반복문으로 "안녕하세요"를 3번 출력하기
count = int(input("몇 번 인사할까요? (1 이상 숫자): "))
if count <= 0:
print("1 이상의 숫자를 입력해주세요.")
else:
for i in range(1, count + 1):
print(f"{i}번째 인사: 안녕하세요")
🖨️ 출력결과: (입력: 3)
몇 번 인사할까요? (1 이상 숫자): 3
1번째 인사: 안녕하세요
2번째 인사: 안녕하세요
3번째 인사: 안녕하세요
🖨️ 출력결과: (입력: 0)
몇 번 인사할까요? (1 이상 숫자): 0
1 이상의 숫자를 입력해주세요.
🔍 해설:
range(3)
은 0부터 2까지 총 3번 반복을 의미해요.for i in range(3)
은 3번 반복하면서"안녕하세요"
를 출력해줍니다.- 여기서 변수
i
는 반복 횟수를 세는 용도이고, 꼭 사용하지 않아도 돼요.
📝 문제1] "Python"을 5번 출력하세요.
✅ 정답 코드:
for i in range(5):
print("Python")
🖨️ 출력 결과:
Python Python Python Python Python
🔍 해설:
range(5)
는 0부터 4까지 → 총 5번 반복해요.- 그동안
"Python"
이라는 문자열을 계속 출력합니다.
📝 문제2] 1부터 100 사이의 숫자 중에서, 3의 배수이면서 5의 배수가 아닌 숫자만 거꾸로 출력하세요.
✅ 정답 코드:
# i % 3 == 0 and i % 5 != 0
for i in range(100 , 0 , -1):
if i % 3 == 0 and i % 5 != 0:
print(i)
🖨️ 출력 결과:
99
96
93
...
6
3
🔍 해설:
range(100, 0, -1)
→ 100부터 1까지 1씩 감소i % 3 == 0
→ 3의 배수인 경우i % 5 != 0
→ 5의 배수가 아닌 경우- 두 조건을 모두 만족하는 숫자만 출력
- 실무에서 많이 쓰이는 조건 필터링 + 역순 반복 예시
📝 문제3] 10개의 최근 뉴스 제목이 리스트에 저장돼 있습니다.
가장 최근 항목부터 번호를 붙여서 1번부터 10번까지 출력하세요.
news = [
"기후 변화 대응 강화",
"우주 탐사 프로젝트 발표",
"AI 기술 발전 논의",
"경제 성장률 발표",
"국제 협력 강화",
"로봇 산업 급성장",
"신약 개발 성공",
"스마트시티 확산",
"탄소 중립 계획 발표",
"자율주행차 상용화"
]
🖨️ 출력 결과:
1위: 자율주행차 상용화
2위: 탄소 중립 계획 발표
3위: 스마트시티 확산
...
10위: 기후 변화 대응 강화
✅ 정답 코드:
for i in range(len(news) - 1, -1, -1): # range(9, 0, -1)
print(f"{len(news) - i}위: {news[i]}")
🔍 해설:
-
range(len(news) - 1, -1, -1)
→ 리스트를 역순으로 순회 -
len(news) - i
는 1부터 10까지 자동으로 증가 (번호 부여) -
최신 뉴스일수록 먼저 출력 (실제 뉴스 앱, 채팅 로그 등에서 사용하는 방식)
이런 패턴은 실무 API 응답 정렬, 로그 추적, 순위 매기기등에 자주 활용됩니다.
📖 자료구조개념:
- First In First Out : FIFO(선입선출) 줄서기 -> 큐(Queue)
- Last In First Out : (LIFO) (후입선출) 접시쌓기 -> 스택(Stack)
</> 예시코드: 출석부에서 결석자 번호만 출력하기
students = ["민수", "영희", "철수", "지민", "수진"]
absent = [1, 3] # 결석한 학생의 번호 (0부터 시작)
for i in range(len(students)):
if i in absent:
print(f"{i+1}번 {students[i]} 결석")
🖨️ 출력결과:
2번 영희 결석
4번 지민 결석
🔍 해설 리스트
range(len(students))
는 학생 수만큼 인덱스를 반복합니다 →range(5)
i in absent
로 결석 여부를 판단하여 출력합니다.i+1
은 학생 번호처럼 1부터 표시하려는 목적입니다.- 이 구조는 명단 처리, 로그 분석, 사용자 인덱싱 등 다양한 실무 상황에서 응용됩니다.
📝 문제1] range()
로 1부터 10까지 출력하기
✅ 정답 코드:
for i in range(1, 11):
print(i)
🖨️ 출력 결과:
1
2
3
4
5
6
7
8
9
10
🔍 해설:
range(1, 11)
은 1부터 10까지 생성합니다.- 끝 숫자 11은 포함되지 않으므로, 10까지 출력돼요.
📝 문제2] 0부터 20까지 2씩 증가하며 출력하기
✅ 정답 코드:
for i in range(0, 21, 2):
print(i)
🖨️ 출력 결과:
0
2
4
6
8
10
12
14
16
18
20
🔍 해설:
range(시작, 끝, 증가폭)
형식으로 사용돼요.range(0, 21, 2)
는 0부터 20까지 2씩 증가합니다.- 끝값
21
은 포함되지 않아요.
🔹 for
반복문: 반대로 반복하기
for 반복문은 숫자를 감소하는 방향으로도 반복할 수 있어요.
이럴 때는 range() 함수에 감소폭을 설정하면 돼요.
range(시작, 끝, -1)처럼 작성하면, 거꾸로 반복이 가능해요.
끝값은 여전히 포함되지 않는 것을 주의해야 해요!
</> 예시코드: 5부터 1까지 숫자 출력하기
start = int(input("시작 숫자 입력 (예: 10): "))
end = int(input("끝 숫자 입력 (예: 1): "))
step = int(input("감소할 수 (양의 정수): "))
if start <= end or step <= 0: # or and
print("시작값은 끝값보다 커야 하고, 감소폭은 양수여야 합니다.")
else:
print(f"\n - {start}부터 {end}까지 {step}씩 감소하면서 출력:")
for i in range(start, end - 1, -step):
print(i)
🖨️ 출력결과: (입력: 10, 1, 2)
시작 숫자 입력 (예: 10): 10
끝 숫자 입력 (예: 1): 1
감소할 수 (양의 정수): 2
- 10부터 1까지 2씩 감소하면서 출력:
10
8
6
4
2
🖨️ 출력결과: (입력 오류: 시작값이 작거나 step이 음수)
시작 숫자 입력 (예: 10): 3
끝 숫자 입력 (예: 10): 10
감소할 수 (양의 정수): 1
시작값은 끝값보다 커야 하고, 감소폭은 양수여야 합니다.
🔍 해설:
int(input(...)) :
사용자에게 숫자 입력 받음if start <= end or step <= 0 :
잘못된 입력에 대한 유효성 검사range(start, end - 1, -step) :
감소 방향으로 반복 (end 포함하려면 -1 필요)print(i) :
현재 숫자 출력
📝 문제1] 10부터 1까지 거꾸로 출력해보세요.
✅ 정답 코드:
for i in range(10, 0, -1):
print(i)
🖨️ 출력 결과:
10
9
8
7
6
5
4
3
2
1
🔍 해설:
- 시작값은 10, 끝값은 0 → 0은 포함되지 않기 때문에 1까지만 출력돼요.
range(10, 0, -1)
은 10부터 1까지 감소하며 반복합니다.
📝 문제2] 리스트 [5, 4, 3, 2, 1]
을 거꾸로 출력해보세요.
✅ 정답 코드:
numbers = [5, 4, 3, 2, 1]
for n in numbers:
print(n)
🖨️ 출력 결과:
5
4
3
2
1
🔍 해설:
- 이 문제는 실제
range()
를 사용하지 않아도 리스트 자체가 역순이기 때문에 그대로 출력하면 됩니다. - 또는
reversed()
함수를 사용해도 됩니다.
📝 문제3] range()
와 for
문을 사용해서 20부터 2까지 2씩 감소하며 출력해보세요.
✅ 정답 코드:
for i in range(20, 1, -2):
print(i)
🖨️ 출력 결과:
20
18
16
14
12
10
8
6
4
2
🔍 해설:
range(20, 1, -2)
는 20부터 시작해서 2씩 감소해요.- 끝값인 1은 포함되지 않기 때문에 2까지만 출력됩니다.
📝 문제4] 최근 활동 로그를 최신순으로 출력하기
회사 내부 시스템에서는 사용자 활동 로그를 리스트에 시간순으로 저장합니다.
이 리스트를 최신순(거꾸로) 출력하세요.
logs = ["로그인", "파일 업로드", "메일 확인", "로그아웃", "재로그인"]
위 리스트는 오래된 기록이 먼저, 최근 기록이 마지막에 저장되어 있습니다.
가장 최근 활동부터 하나씩 출력하는 코드를 작성하세요.
🖨️ 출력 결과:
[4] 재로그인
[3] 로그아웃
[2] 메일 확인
[1] 파일 업로드
[0] 로그인
✅ 정답 코드: range(시작값, 끝값, 증가/감소값) -> range(4, -1, -1)
logs = ["로그인", "파일 업로드", "메일 확인", "로그아웃", "재로그인"]
for i in range(len(logs) - 1, -1, -1): # 4부터 0까지 거꾸로
print(f"[{i}] {logs[i]}")
logs == range(5) → [0, 1, 2, 3, 4]
🔍 해설:
- 리스트 길이:
len(logs) = 5
- 마지막 인덱스:
4
- 우리가 거꾸로 돌고 싶어요 → 인덱스:
4 → 3 → 2 → 1 → 0
# 그래서 이렇게 작성됩니다.
for i in range(4, -1, -1):
print(f"[{i}] {logs[i]}")
- 4 부터 시작
- 4 부터 0까지 (종료값 -1은 포함 안 됨)
- 반복되는
i
:[4, 3, 2, 1, 0]
- 즉,
i = 4 → 3 → 2 → 1 → 0
🔹 for
반복문: 리스트와 조합하기
for 반복문은 range()뿐만 아니라 리스트(list)와도 함께 사용할 수
있어요. 리스트 안에 있는 값 하나하나를 순서대로 꺼내서 반복 작업을
할 수 있습니다.
</> 예시코드: 리스트의 요소 하나씩 출력하기
fruits = ["사과", "바나나", "포도", "수박", "딸기", "참외", "블루베리"]
limit = int(input("몇 글자 이하인 과일만 출력할까요? "))
print(f"\n 📝 {limit}글자 이하 과일 목록:")
print("-" * 30)
for fruit in fruits:
if len(fruit) > limit: # 3 > 2
continue # 조건에 맞지 않으면 건너뜀
print(f"{fruit} ({len(fruit)}글자)")
🖨️ 출력결과:
몇 글자 이하인 과일만 출력할까요? 2
📝 2글자 이하 과일 목록:
------------------------------
사과 (2글자)
포도 (2글자)
수박 (2글자)
딸기 (2글자)
참외 (2글자)
🔍 해설:
- 리스트
fruits
에 3개의 과일이 들어 있어요. for fruit in fruits:
는 리스트의 각 요소를 하나씩 꺼내서fruit
에 저장해요.- 그래서
print(fruit)
가 3번 반복되며 각각 출력됩니다.
📝 문제1] 점수 리스트 [100, 85, 90]
의 모든 점수를 출력해보세요.
✅ 정답 코드:
scores = [100, 85, 90]
for score in scores:
print(score)
🖨️ 출력 결과:
100 85 90
🔍 해설:
- 리스트
scores
에는 점수 3개가 들어있어요. for score in scores:
는 각 점수를 하나씩 꺼내서print()
로 출력해요.
📝 문제2] 여러 명의 사용자 이름이 담긴 리스트가 있습니다.
이름이 2글자인 경우에는 "안녕하세요, OO님!"
,
이름이 3글자인 경우에는 "환영합니다, OOO 고객님!"
이라고 다르게 출력하세요.
names = ["민수", "영희", "김철수", "박지민", "최연"]
🖨️ 출력 결과:
안녕하세요, 민수님!
안녕하세요, 영희님!
환영합니다, 김철수 고객님!
환영합니다, 박지민 고객님!
안녕하세요, 최연님!
✅ 정답 코드:
names = ["민수", "영희", "김철수", "박지민", "최연"]
for name in names:
if len(name) == 2:
print(f"안녕하세요, {name}님!")
elif len(name) == 3:
print(f"환영합니다, {name} 고객님!")
🔍 해설:
len(name)
을 통해 이름 길이를 검사함- 조건에 따라 서로 다른 인사말을 출력
- 실무에서 사용자 유형 분류, 맞춤 메시지 발송 로직 등에 사용되는 패턴
📝 문제3] 숫자 리스트 [10, 20, 30, 40, 50]
가 있습니다.
각 숫자에 대해 "값: 10, 제곱: 100"
형식으로 출력하세요.
🖨️ 출력 결과:
값: 10, 제곱: 100
값: 20, 제곱: 400
값: 30, 제곱: 900
값: 40, 제곱: 1600
값: 50, 제곱: 2500
✅ 정답 코드:
numbers = [10, 20, 30, 40, 50]
for n in numbers:
square = n ** 2
print(f"값: {n}, 제곱: {square}")
🔍 해설:
** 2
는 거듭제곱 연산자 →n의 제곱
- 문자열 포맷팅을 이용해 보기 좋게 출력
- 실무에서는 숫자 계산 결과 로깅, 보고서 출력, 데이터 요약 출력 등에 유용
🔹 중첩으로 피라미드 만들기
중첩 반복문(nested loop)이란 반복문 안에 또 다른 반복문이 있는
구조를 말해요.
특히 별(*) 모양을 이용해서 피라미드 형태 출력을 만들 때 자주
사용됩니다.
바깥쪽 반복문은 행(줄 수)를 제어하고,
안쪽 반복문은 열(각 줄의 출력 내용)을 제어해요.
◽ 중첩for문의 실행 흐름:
for i in range(1, 4): # 바깥 반복문
for j in range(1, 4): # 안쪽 반복문
print(f"i={i}, j={j}")
🔁 실제 실행 흐름:
-
i = 1
j = 1
→ 실행j = 2
→ 실행j = 3
→ 실행
-
i = 2
j = 1
→ 실행j = 2
→ 실행j = 3
→ 실행
-
i = 3
j = 1
→ 실행j = 2
→ 실행j = 3
→ 실행
🖨️ 출력결과:
i=1, j=1
i=1, j=2
i=1, j=3
i=2, j=1
i=2, j=2
i=2, j=3
i=3, j=1
i=3, j=2
i=3, j=3
</> 예시코드: 별 * 을 이용한 5줄짜리 피라미드 만들기
for i in range(1, 6): # 1~5까지 반복 (줄 수)
for j in range(i): # i번 반복하며 별 출력
print("*", end="") # 줄바꿈 없이 출력
print() # 줄바꿈
🖨️ 출력결과:
*
**
***
****
*****
🔍 해설:
- 바깥쪽
for i in range(1, 6)
은 총 5줄을 반복해요. - 안쪽
for j in range(i)
는 각 줄마다 i개의 별을 출력해요. print("*", end="")
는 별을 한 줄에 이어서 출력하게 만들고,
print()
는 별을 다 출력한 뒤 줄바꿈을 해줍니다.
i 값 |
내부 반복(j ) |
출력 내용 |
---|---|---|
i = 1 | j: 0 | * |
i = 2 | j: 0, 1 | ** |
i = 3 | j: 0, 1, 2 | *** |
i = 4 | j: 0, 1, 2, 3 | **** |
i = 5 | j: 0, 1, 2, 3, 4 | ***** |
📝 문제1] 4줄짜리 피라미드 출력해보세요.
✅ 정답 코드:
for i in range(1, 5):
for j in range(i):
print("*", end="")
print()
🖨️ 출력 결과:
*
**
***
****
🔍 해설:
range(1, 5)
는 1~4까지 → 4줄 반복- 각 줄마다 별 개수를 i번만큼 출력해요.
📝 문제2] 피라미드를 역방향으로 출력해보세요. (5줄)
✅ 정답 코드:
for i in range(5, 0, -1): # 5부터 1까지 감소
for j in range(i): # i번 반복하며 별 출력
print("*", end="")
print()
🖨️ 출력 결과:
*****
****
***
**
*
🔍 해설:
range(5, 0, -1)
은 5 → 4 → 3 → 2 → 1 순서로 줄 수 감소- 각 줄마다 줄 수만큼 별을 찍어요
📝 문제3] 공백과 별을 조합해서 정렬된 피라미드 출력 (5줄)
✅ 정답 코드:
for i in range(1, 5):
for j in range(4 - i): # 왼쪽 공백
print(" ", end="")
for k in range(i): # 오른쪽 별
print("*", end="")
print() # 오른쪽 별
🖨️ 출력 결과:
*
**
***
****
*****
🔍 해설:
" " * (5 - i)
는 줄이 내려갈수록 공백이 줄어들도록 설정"*"
는 줄 번호(i
)만큼 출력- 결과적으로 오른쪽 정렬된 피라미드가 출력됩니다.
🔹 while 반복문: for 반복문처럼 사용하기
for 반복문은 정해진 횟수만큼 반복하는 데에 매우 편리하지만,
while문을 사용해서도 for문과 같은 반복을 만들 수 있어요.
핵심은 초기값, 조건, 증감식을 직접 명시적으로 작성해야 한다는
점이에요.
</> 예시코드: for
문처럼 0부터 4까지 출력하기 (while
사용)
i = 0
while i < 5:
print(i)
i += 1
🖨️ 출력결과:
0
1
2
3
4
🔍 해설:
for i in range(5)
와 똑같은 반복을while
문으로 만든 예제예요.i = 0
으로 시작해서i < 5
인 동안 반복i += 1
로 값을 증가시키며 반복 횟수를 제어
</> 예시코드: 1부터 시작해 짝수만 누적하여 합이 30을 넘기면 종료하는 while
반복
i = 1
total = 0
while True: # 무한반복 설정
if i % 2 == 0: # 현재 숫자 i가 짝수면
total += i # 누적합에 더하고
print(f"현재 짝수: {i}, 누적 합계: {total}") # 출력하고
if total > 30: # 여기서 또 조건을 확인해서
print("합계가 30을 넘었습니다. 반복 종료.")
break # 조건 만족 시 반복 종료
i += 1 # i를 다음 숫자로 증가
🖨️ 출력 결과 예시:
현재 짝수: 2, 누적 합계: 2
현재 짝수: 4, 누적 합계: 6
현재 짝수: 6, 누적 합계: 12
현재 짝수: 8, 누적 합계: 20
현재 짝수: 10, 누적 합계: 30
현재 짝수: 12, 누적 합계: 42
합계가 30을 넘었습니다. 반복 종료.
🔍 해설
while True
로 무한 반복 설정i % 2 == 0
: 짝수일 때만 처리- 짝수들을 누적 합계(
total
)에 더함 - 합이 30을 넘는 순간
break
로 종료 i += 1
로 카운터 증가
📝 문제1] while
문으로 1부터 5까지 출력해보세요.
✅ 정답 코드:
i = 1
while i <= 5:
print(i)
i += 1
for i in range(1,6):
print(i)
🖨️ 출력 결과:
1
2
3
4
5
🔍 해설:
i = 1
부터 시작해서i <= 5
일 때 반복for i in range(1, 6)
과 같은 결과를while
로 표현한 코드예요.
📝 문제2] 리스트 리스트 [12, 7, 25, 18, 5, 30]
에서
짝수인 숫자만 누적하여 더하다가, 누적합이 50을 넘으면 반복을 멈추고,
누적합과 더해진 숫자들만 출력하세요.
🖨️ 출력 결과:
누적합: 60
더한 숫자들: [12, 18, 30]
✅ 정답 코드:
numbers = [12, 7, 25, 18, 5, 30]
i = 0
total = 0
added = []
while i < len(numbers): # for i in numbers
if numbers[i] % 2 == 0:
total += numbers[i]
added.append(numbers[i])
if total > 50:
break
i += 1 # for문일 경우 필요없음.
print("누적합:", total)
print("더한 숫자들:", added)
🔍 해설:
i
를 인덱스로 사용해서 리스트를while
문으로 순회합니다.numbers[i] % 2 == 0
→ 짝수만 선택total += numbers[i]
로 누적합 계산added.append(numbers[i])
로 어떤 숫자들이 더해졌는지 추적- 누적합이 50을 넘으면
break
로 반복 종료 - 실무에서도 조건 누적 및 로그 추적 시 매우 유용한 패턴입니다.
📝 문제3] while
문으로 구구단 2단을 출력해보세요.
✅ 정답 코드:
i = 1
while i <= 9:
print("2 x", i, "=", 2 * i)
i += 1
🖨️ 출력 결과:
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10
2 x 6 = 12
2 x 7 = 14
2 x 8 = 16
2 x 9 = 18
🔍 해설:
i = 1
부터 시작해서i <= 9
일 때 반복 → 1단부터 9단까지 출력 가능print()
안에서 곱셈 결과를 바로 계산해서 출력함for i in range(1, 10)
과 같은 반복을while
로 구성한 예제예요
📝 문제4] 사용자가 "yes"
를 입력하면 "Hello"
를 출력합니다.
총 3번까지 입력 기회를 주고, "yes"
가 입력될 때만 "Hello"
를 출력하세요.
🖨️ 예시 실행 (사용자 입력 기준):
출력할까요? (yes 입력): no
출력할까요? (yes 입력): yes
Hello
출력할까요? (yes 입력): yes
Hello
총 2번 Hello를 출력했습니다.
✅ 정답 코드:
count = 0
printed = 0
while count < 3:
reply = input("출력할까요? (yes 입력): ").strip()
if reply == "yes":
print("Hello")
printed += 1
count += 1
print(f"총 {printed}번 Hello를 출력했습니다.")
🔍 해설:
count
는 입력 횟수 (총 3번까지)- 사용자가
"yes"
라고 입력했을 때만"Hello"
출력 - 출력된 횟수는
printed
에 누적 - 실무에서도 반복 조건 + 사용자 응답에 따라 로직 처리할 때 매우 자주 쓰입니다
🔹 while 반복문: 상태를 기반으로 반복하기
while 반복문은 반복 횟수가 정해지지 않았을 때,
특정 상태(state)가 유지되는 동안 반복하기에 매우 적합합니다.
🧐 상황예시
- 로그인 상태가 False인 동안 계속 로그인 시도
- 사용자가 "종료"라고 입력하기 전까지 계속 입력받기
- 플레이어의 체력이 0보다 클 때까지 게임 반복
while
반복문의 상태 기반 구조는 이런 식입니다:
상태 = True
while 상태:
작업 수행
if 어떤 조건을 만나면:
상태 = False
즉, 상태 변화가 없으면 무한 반복하고,
조건에 따라 상태를 False로 변경하여 종료시키는 방식입니다.
</> 예시코드: 사용자가 "exit"
을 입력할 때까지 계속 입력받기
command = ""
while command != "exit":
command = input("명령어를 입력하세요 (종료하려면 exit): ")
🖨️ 출력결과 예시:
명령어를 입력하세요 (종료하려면 exit): hello
명령어를 입력하세요 (종료하려면 exit): run
명령어를 입력하세요 (종료하려면 exit): exit
🔍 해설:
command
라는 상태 변수가"exit"
이 될 때까지 반복해요.- 사용자의 입력을 계속 받아서 상태를 바꿔주고,
"exit"
을 입력하면 조건이False
가 되어 종료됩니다.
</> 예시코드: 로그인 시도 제한 시스템
사용자에게 아이디를 계속 입력받고, 맞는 아이디("admin"
)가 입력되면 "로그인 성공"
출력 후 종료 3번 이상 실패하면 "접속 차단"
메시지와 함께 종료
MAX_TRIES = 3 # 로그인 시도 가능 최대 횟수
attempts = 0 # 현재까지 시도한 횟수를 저장하는 변수
user_id = "" # 사용자의 입력 아이디를 저장할 변수 (초기값은 빈 문자열)
# "admin" 아이디가 입력될 때까지 반복
while user_id != "admin":
user_id = input("아이디를 입력하세요: ").strip()
attempts += 1 # 시도 횟수 1 증가
if user_id == "admin": # 올바른 아이디인 경우
print("로그인 성공!") # 로그인 성공 메시지 출력
break # 반복문 종료
if attempts >= MAX_TRIES: # 최대 시도 횟수에 도달한 경우
print("접속 차단: 로그인 시도 횟수 초과") # 차단 메시지 출력
break # 반복문 종료
else:
print(f"잘못된 아이디입니다. ({attempts}회 실패)")
# 잘못된 아이디를 입력한 경우, 현재까지 실패한 횟수를 함께 출력
if elif...
대신 if
문을 두번 사용한 이유는 코드 흐름의 모든 조건을 독립적으로 검사하기 위해서입니다.
if user_id == "admin": # # 조건1이 참이면 실행
print("로그인 성공!")
break
if attempts >= MAX_TRIES: # 조건2도 별개로 검사
print("접속 차단: 로그인 시도 횟수 초과")
break
if ...
조건이 참이면 실행
elif ...
앞의 if
가 거짓일 때만 실행
즉 두조건 모두 검사가 가능한 상태로 만들기 위해 if
를 별개로 사용했습니다.
🖨️ 출력 예시 (실패 후 성공)
아이디를 입력하세요: test
잘못된 아이디입니다. (1회 실패)
아이디를 입력하세요: guest
잘못된 아이디입니다. (2회 실패)
아이디를 입력하세요: admin
로그인 성공!
📝 문제1] 비밀번호가 맞을 때까지 계속 입력받기
✅ 정답 코드:
password = ""
while password != "1234":
password = input("비밀번호를 입력하세요: ")
print("접속 성공!")
🖨️ 출력 결과 예시:
비밀번호를 입력하세요: 0000
비밀번호를 입력하세요: pass
비밀번호를 입력하세요: 1234
접속 성공!
🔍 해설:
password
가"1234"
와 같아질 때까지 반복- 맞는 비밀번호를 입력하면 반복 종료 → 접속 성공 메시지 출력
📝 문제2] True
상태를 활용한 무한 반복 → break
로 종료
✅ 정답 코드:
while True:
answer = input("종료하시겠습니까? (y/n): ")
if answer == "y":
print("프로그램을 종료합니다.")
break
🖨️ 출력 결과 예시:
종료하시겠습니까? (y/n): n
종료하시겠습니까? (y/n): y
프로그램을 종료합니다.
🔍 해설:
while True
는 무조건 반복하는 구조 (무한 루프)if
문으로 상태를 체크하고, 조건이 충족되면break
로 탈출- 실제 프로그램에서 종료 조건 감지 등에 자주 사용돼요
📝 문제3] 로그인 상태가 False
이면 계속 로그인 시도
✅ 정답 코드:
is_logged_in = False
while not is_logged_in:
user = input("아이디 입력: ")
if user == "admin":
is_logged_in = True
print("로그인 성공!")
else:
print("아이디가 틀렸습니다.")
🖨️ 출력 결과 예시:
아이디 입력: guest
아이디가 틀렸습니다.
아이디 입력: admin
로그인 성공!
🔍 해설:
- 상태 변수
is_logged_in
이False
인 동안 반복 "admin"
이 입력되면 상태가True
로 바뀌며 반복 종료- 상태를 조건으로 쓰는 대표적인 예제 구조
while
반복문은 상태 기반 로직에 매우 유용하며,
입력 대기, 사용자 응답 처리, 게임 루프 등에도 자주 활용됩니다.
🔹 while 반복문: 시간을 기반으로 반복하기
while 반복문은 시간 조건을 기준으로 반복을 제어할 수도 있습니다.
예를 들어, 5초 동안 실행, 1초마다 동작, 특정 시각까지 반복 등의
작업이 가능합니다.
◽ time
모듈이란?
파이썬에서 시간 관련 작업을 할 수 있게 해주는 도구입니다.
🧐 상황예시:
- 현재 시각 확인
- 시간 차이 측정
- 일정 시간 멈추기(sleep)
</> 예시코드: 5초 동안 "반복 중..."이라는 문장을 1초 간격으로 출력
import time # 시간 관련 기능을 사용하기 위해 불러옴
start = time.time() # 현재 시각을 저장해요
while time.time() - start < 5: # 경과 시간이 5초가 될 때까지 반복
print("반복 중...") # 메시지 출력
time.sleep(1) # 1초 쉬고 다시 반복
🖨️ 출력 결과 (1초 간격으로 출력):
반복 중...
반복 중...
반복 중...
반복 중...
반복 중...
🔍 해설:
time.time()
→ 지금 시각을 초로 알려줍니다. 예:1715325678.45894
start
에 시작 시간을 저장합니다.while
조건:time.time() - start
는 지금까지 지난 시간입니다.- 그 시간이 5초보다 작으면 반복
print("반복 중...")
출력time.sleep(1)
→ 1초 멈춘 후 다시 실행
📝 문제1] 3초간 숫자를 매초 1씩 증가시키며 출력하세요.
✅ 정답 코드:
import time
start = time.time() # 1000
count = 1
while time.time() - start < 3: # 1001 - 1000 = 1 < 3
print(count)
count += 1
time.sleep(1)
🖨️ 출력 결과 예시:
1
2
3
🔍 해설:
- 3초 동안 반복하면서 숫자를 1씩 증가시켜 출력
- 매 반복마다 1초 쉬므로 정확히 3초간 3번 실행됨
📝 문제2] 현재 시간부터 5초 후까지 남은 시간 카운트다운
✅ 정답 코드:
import time
end = time.time() + 5 # 5초 후 시각
while time.time() < end:
remaining = int(end - time.time())
print("남은 시간:", remaining, "초")
time.sleep(1)
🖨️ 출력 결과:
남은 시간: 5 초
남은 시간: 4 초
남은 시간: 3 초
남은 시간: 2 초
남은 시간: 1 초
🔍 해설:
end
는 종료 시간(현재 시각 + 5초)end - time.time()
은 남은 시간 계산int()
로 정수로 만들어 출력- 1초마다 줄어들며 카운트다운 동작
📝 문제3] 1초 간격으로 현재 시각을 3번 출력하기
✅ 정답 코드:
import time
i = 0
while i < 3:
print("현재 시각:", time.strftime("%H:%M:%S"))
time.sleep(1)
i += 1
🖨️ 출력 결과 예시:
현재 시각: 23:12:37
현재 시각: 23:12:38
현재 시각: 23:12:39
🔍 해설:
time.strftime()
은 현재 시각을 형식에 맞게 출력해주는 함수예요."%H:%M:%S"
는 시:분:초 형식while
문을 3번 반복하며 1초마다 출력
◽ 활용범위:
while
반복문에 time
모듈을 결합하면
시간 기반 자동화, 타이머, 애니메이션 대기, 센서 체크 루프 등
다양한 현실적인 프로그램을 만들 수 있습니다.
💭직접 풀어보세요.
📝 문제1] 짝수만 출력하고 종료하기
숫자 1부터 100까지 중에서, 홀수일 때만 "건너뜀"을 출력하고,
짝수는 그대로 출력하세요. 단, 숫자가 20보다 크면 반복을 종료하세요.
✨ 힌트:
i % 2 != 0
→ 홀수continue
는 아래 코드를 건너뛰고 다음 반복으로 넘어갑니다.break
는 반복을 끝냅니다.i += 1
을 적절한 위치에 넣어야 합니다.
🖨️ 출력 결과
건너뜀
2
건너뜀
4
건너뜀
6
...
건너뜀
20
✅ 정답 코드:
i = 1
while True:
if i > 20:
break
if i % 2 != 0:
print("건너뜀")
i += 1
continue
print(i)
i += 1
🔍 해설:
i
는 1부터 시작해서 1씩 증가i % 2 != 0
이면 홀수이므로"건너뜀"
출력 후continue
→ 다음 반복으로- 짝수는 그대로 출력됨
i > 20
이 되면break
로 반복 종료i += 1
을 각 조건 블록 안에 정확히 넣어야 무한 루프를 방지함
📝 문제2] 비밀번호 입력 시까지 반복
사용자가 "1234"
라는 비밀번호를 입력할 때까지 반복합니다.
정답을 입력하면 "접속 승인"
을 출력하고 종료하세요.
✨ 힌트:
- 사용자 입력은
input()
- 정답 검사 →
if password == "1234"
- 맞으면
break
🖨️ 출력 결과
비밀번호를 입력하세요: 0000
비밀번호를 입력하세요: 1111
비밀번호를 입력하세요: 1234
접속 승인
✅ 정답 코드:
while True:
password = input("비밀번호를 입력하세요: ")
if password == "1234":
print("접속 승인")
break
🔍 해설:
- 정답이 아니면 계속 반복
"1234"
입력 시만break
로 종료됨
📝 문제3] 최대 3번만 반복하기 "반복합니다."라는 문장을 최대 3번까지만 출력하고, 그 이후에는 자동 종료되게 하세요.
✨ 힌트:
- 반복 횟수는
i
로 세기 if i >= 3: break
🖨️ 출력 결과
반복합니다.
반복합니다.
반복합니다.
✅ 정답 코드:
i = 0
while True:
if i >= 3:
break
print("반복합니다.")
i += 1
🔍 해설:
i
가 3 이상이 되면 반복 종료- 반복 중
i += 1
로 횟수를 증가시켜야 무한 루프 방지
📝 문제4] 사용자에게 계속 단어를 입력받아 출력하세요.
단, 입력한 단어가 "skip"
이면 아무 일도 하지 말고 다음 입력을 받으세요.
입력한 단어가 "exit"
이면 프로그램을 종료하세요.
✨ 힌트:
"exit"
입력 시 →break
로 종료"skip"
입력 시 →continue
로 출력 없이 다음 반복- 그 외에는
"입력한 값:"
과 함께 그대로 출력
🖨️ 출력 결과 (예시):
입력하세요: hello
입력한 값: hello
입력하세요: skip
입력하세요: 123
입력한 값: 123
입력하세요: exit
✅ 정답 코드:
while True:
user_input = input("입력하세요: ")
if user_input == "exit":
break
if user_input == "skip":
continue
print("입력한 값:", user_input)
🔍 해설:
- 무한 반복 구조 (
while True
) "exit"
입력 시break
로 종료"skip"
입력 시continue
로print()
를 건너뛰고 다시 반복- 그 외 입력은
print()
로 출력
📝 문제5] 들여쓰기 오류 수정하기 다음 코드에는 오류가 있습니다. 문제를 고치세요.
i = 0
while i < 5:
print(i)
i += 1
✨ 힌트:
- 파이썬은 들여쓰기가 매우 중요합니다.
- 반복문 내부 코드는 반드시 들여쓰기 해야 합니다.
🖨️ 출력 결과
0
1
2
3
4
✅ 정답 코드:
i = 0
while i < 5:
print(i)
i += 1
🔍 해설:
print()
와i += 1
은while
문 안에 있어야 하므로 들여쓰기 필수- 파이썬은 블록 구분을 들여쓰기로 하며, 보통 스페이스 4칸을 사용
📝 문제6] 10보다 작은 수 건너뛰기
다음 리스트에서 10보다 작은 숫자는 건너뛰고,
10 이상인 숫자만 출력되도록 코드를 완성하세요.
numbers = [5, 15, 6, 20, 7, 25]
for number in numbers:
# 여기에 조건과 continue를 작성하세요
print(number)
✨ 힌트:
number < 10
이면continue
사용continue
는 해당 반복을 건너뜁니다
🖨️ 출력 결과
15
20
25
✅ 정답 코드:
numbers = [5, 15, 6, 20, 7, 25]
for number in numbers:
if number < 10:
continue
print(number)
🔍 해설:
5
,6
,7
은 10보다 작기 때문에continue
로 출력 생략- 나머지 숫자만 출력됨
📝 문제7] 음수 건너뛰기 다음 리스트에서 음수(-) 는 출력하지 말고, 양수만 출력되도록 코드를 완성하세요.
numbers = [10, -5, 20, -3, 30]
for num in numbers:
# 음수이면 건너뛰도록 작성
print(num)
✨ 힌트:
if num < 0:
조건을 사용하세요
🖨️ 출력 결과
10
20
30
✅ 정답 코드:
numbers = [10, -5, 20, -3, 30]
for num in numbers:
if num < 0:
continue
print(num)
🔍 해설:
-5
,-3
은 음수이므로 출력하지 않음continue
덕분에 다음 반복으로 건너뜀
📝 문제8] 빈 문자열 건너뛰기 다음 이름 리스트에서 빈 문자열("") 은 건너뛰고, 이름이 있을 때만 인사 메시지를 출력하세요.
names = ["Alice", "", "Bob", "", "Charlie"]
for name in names:
# 빈 문자열이면 건너뛰도록 조건 작성
print("안녕하세요,", name)
✨ 힌트:
if name == ""
조건을 사용- 문자열이 비었는지 확인하세요
🖨️ 출력 결과
안녕하세요, Alice
안녕하세요, Bob
안녕하세요, Charlie
✅ 정답 코드:
names = ["Alice", "", "Bob", "", "Charlie"]
for name in names:
if name == "":
continue
print("안녕하세요,", name)
🔍 해설:
- 빈 문자열은 출력하지 않음
- 인사 메시지는 이름이 있을 때만 출력됨
📝 문제9] 특정 숫자(7)만 건너뛰기 다음 숫자 리스트에서 숫자 7만 건너뛰고 나머지 숫자는 모두 출력되도록 만드세요.
numbers = [3, 5, 7, 9, 11]
for n in numbers:
# 숫자 7은 출력하지 않도록 작성
print(n)
✨ 힌트:
if n == 7:
조건을 사용하세요
🖨️ 출력 결과
3
5
9
11
✅ 정답 코드:
numbers = [3, 5, 7, 9, 11]
for n in numbers:
if n == 7:
continue
print(n)
🔍 해설:
- 숫자 7일 때만 출력하지 않고 다음 반복으로 넘어감
- 나머지는 모두 출력됨
📝 문제10] 위로 쌓는 삼각형 별 출력 다음과 같은 삼각형 형태로 별을 출력하는 코드를 작성하세요:
*
**
***
****
*****
✨ 힌트:
- 줄 수는
1~5
- 각 줄의 별 개수는 줄 번호와 같음 →
range(1, i + 1)
✅ 정답 코드:
output = ""
for i in range(1, 6): # 줄 수: 1~5
for j in range(1, i + 1): # 각 줄의 별 개수: 1~i
output += "*"
output += "\n"
print(output)
🔍 해설:
- 바깥
i
는 줄 수 (1~5) - 안쪽
j
는 해당 줄에서 출력할 별 개수 - 줄마다 줄바꿈
\n
추가
📝 문제12] 무한히 점 찍기
while True
를 사용해 . (점)
을 줄바꿈 없이 계속 출력하는 코드를 작성하세요. 무한 반복되며 end=""
옵션을 활용해야 합니다.
✨ 힌트:
end=""
을 지정하면 줄바꿈 없이 한 줄에 이어서 출력됨Ctrl + C
로 수동 종료
🖨️ 출력 결과
..........................
✅ 정답 코드:
while True:
print(".", end="")
🔍 해설:
while True:
는 조건이 항상True
이므로 무한 반복됨print(".", end="")
는 줄바꿈 없이.
을 계속 이어서 출력
📝 문제13] 종료 조건 만들기
사용자에게 계속 입력을 받아, "exit"
을 입력하면 반복을 종료하는 코드를 작성하세요.
✨ 힌트:
- 무한 반복 속에서
input()
으로 사용자 입력 받기 if user_input == "exit":
이면break
사용
🖨️ 출력 결과
종료하려면 'exit'을 입력하세요: hello
종료하려면 'exit'을 입력하세요: test
종료하려면 'exit'을 입력하세요: exit
✅ 정답 코드:
while True:
user_input = input("종료하려면 'exit'을 입력하세요: ")
if user_input == "exit":
break
🔍 해설:
"exit"
이라는 특정 문자열을 입력해야break
로 반복문을 종료- 실시간 사용자 입력 대기 구조
📝 문제14] 숫자를 입력받고 누적 합계 출력
사용자가 숫자를 계속 입력하도록 하고,
0
을 입력하면 종료하고 총합을 출력하는 코드를 작성하세요.
✨ 힌트:
- 누적 변수
total = 0
- 입력값은
int(input(...))
0
입력 시break
🖨️ 출력 결과
숫자를 입력하세요: 10
숫자를 입력하세요: 20
숫자를 입력하세요: 0
총합: 30
✅ 정답 코드:
total = 0
while True:
num = int(input("숫자를 입력하세요: "))
if num == 0:
break
total += num
print("총합:", total)
🔍 해설:
num == 0
일 때break
- 그 외 숫자는
total
에 계속 더해짐 - 반복 종료 후
print()
로 합계 출력
📝 문제15] 실시간 명령 처리 시뮬레이션 사용자 입력을 계속 받으면서,
start
를 입력하면"시작합니다!"
stop
을 입력하면"멈춥니다!"
exit
을 입력하면 종료
되도록 하세요.
✨ 힌트:
- 조건문
if
,elif
,else
사용 - 종료 조건은
exit
🖨️ 출력 결과
명령어 입력: start
시작합니다!
명령어 입력: stop
멈춥니다!
명령어 입력: exit
✅ 정답 코드:
while True:
command = input("명령어 입력: ")
if command == "start":
print("시작합니다!")
elif command == "stop":
print("멈춥니다!")
elif command == "exit":
break
else:
print("알 수 없는 명령어입니다.")
🔍 해설:
- 다양한 조건을 처리할 수 있도록 분기
exit
입력 시만 루프 종료
📝 문제16] 다음 리스트에서 인덱스 번호와 해당 요소를 함께 출력하는 코드를 작성하세요.
array = [273, 32, 103, 57, 52]
다음과 같은 형식으로 출력되도록 하세요:
0번째 반복: 273
1번째 반복: 32
2번째 반복: 103
3번째 반복: 57
4번째 반복: 52
✨ 힌트:
range(len(array))
는 인덱스를 하나씩 꺼낼 수 있음array[i]
로 해당 인덱스의 값을 가져올 수 있음- 문자열 포맷팅 사용:
print("{}번째 반복: {}".format(i, array[i]))
✅ 정답 코드:
array = [273, 32, 103, 57, 52]
for i in range(len(array)):
print("{}번째 반복: {}".format(i, array[i]))
🔍 해설:
len(array)
는 리스트 길이 → 5range(5)
는0, 1, 2, 3, 4
를 순서대로 반복array[i]
를 이용해 해당 위치의 값을 가져옴i
는 인덱스,array[i]
는 실제 값
📝 문제17] 역방향 반복문 다음과 같이 숫자 4부터 0까지 거꾸로 출력하는 코드를 작성하세요:
현재 반복 변수: 4
현재 반복 변수: 3
현재 반복 변수: 2
현재 반복 변수: 1
현재 반복 변수: 0
✨ 힌트:
range(start, stop, step)
에서
start=4
,stop=-1
,step=-1
- 또는
reversed(range(5))
사용
✅ 정답 코드: range()
사용
for i in range(4, -1, -1): # 4부터 0까지 감소
print("현재 반복 변수: {}".format(i))
✅ 정답 코드: reversed()
사용
for i in reversed(range(5)): # 0~4를 뒤집어서 반복
print("현재 반복 변수: {}".format(i))
🔍 해설: range(4, -1, -1): 4부터 0까지(0이면 -1, 1이면 2로 한개씩 뺀다.) -1 감소 reversed(range(5)): 0~4까지 생성된 range를 뒤집어서 반복
📝 문제18] 반복 변수를 이용한 while 반복문
변수 i
를 사용하여, 0부터 9까지 총 10번 반복하면서
다음과 같은 형식으로 출력되도록 코드를 작성하세요:
0번째 반복입니다.
1번째 반복입니다.
2번째 반복입니다.
...
9번째 반복입니다.
✨ 힌트:
- 반복 조건은
i < 10
- 반복마다
i
를1씩 증가
시켜야 함 - 문자열 안에 변수
i
를 넣으려면format()
또는f-string
사용
🖨️ 출력 결과
0번째 반복입니다.
1번째 반복입니다.
2번째 반복입니다.
3번째 반복입니다.
4번째 반복입니다.
5번째 반복입니다.
6번째 반복입니다.
7번째 반복입니다.
8번째 반복입니다.
9번째 반복입니다.
✅ 정답 코드:
i = 0 # 반복 변수 초기화
while i < 10:
print("{}번째 반복입니다.".format(i))
i += 1 # 반복 변수 증가
🔍 해설: ==i = 0== -> 반복 변수 초기값 (0부터 시작) ==while i < 10:== -> i가 10보다 작을 동안 반복 ==print(...format(i))== -> 현재 반복 횟수를 출력 ==i += 1== -> i를 1씩 증가시켜 반복 조건에 도달하도록 함
📝 문제19] 리스트에서 특정 값 모두 제거하기
다음 리스트가 주어졌을 때, 숫자 2를 리스트에서 모두 제거하고,
남은 값을 출력하는 코드를 작성하세요.
list_test = [1, 2, 1, 2]
value = 2
# 이 아래에 while문을 작성해서 value를 모두 제거하세요
print(list_test)
✨ 힌트:
value in list_test
는 해당 값이 리스트에 아직 존재하는지 확인list.remove(value)
는 해당 값을 한 개씩 제거while
문을 사용해 여러 번 반복해서 모두 제거
🖨️ 출력 결과
[1, 1]
✅ 정답 코드:
list_test = [1, 2, 1, 2]
value = 2
while value in list_test:
list_test.remove(value)
print(list_test)
🔍 해설:
시작 전 [1, 2, 1, 2]
초기 리스트 상태
1회차 실행 [1, 1, 2]
첫 번째 2 제거
2회차 실행 [1, 1]
두 번째 2 제거
3회차 조건 2 없음 → 종료
더 이상 2가 없으므로 반복 종료됨
📝 문제20] 5초 동안 몇 번 반복할 수 있는지 측정하기
파이썬의 time
모듈을 사용하여, 5초 동안 while
반복문이 몇 번 실행되는지 측정하는 프로그램을 완성하세요.
다음 코드를 보고 빈칸을 채워보세요:
import time
number = 0
target_tick = ___________ + 5
while time.time() < ___________:
number += 1
print("5초 동안 {}번 반복했습니다.".format(___________))
✨ 힌트:
time.time()
→ 지금 시간을 초로 알려줌target_tick
은 현재 시간에서 5초 뒤 시각- 마지막 출력에는 반복 횟수를 출력해야 하므로
number
🖨️ 출력 결과 (출력 수치는 컴퓨터 성능에 따라 달라짐)
5초 동안 18739562번 반복했습니다.
✅ 정답 코드:
import time
number = 0
target_tick = time.time() + 5
while time.time() < target_tick:
number += 1
print("5초 동안 {}번 반복했습니다.".format(number))
🔍 해설:
time.time()
지금 시각 (초 단위 실수)
target_tick = time.time() + 5
5초 뒤 시각 설정
while time.time() < target_tick:
5초가 지나기 전까지 계속 반복
number += 1
반복 횟수 1씩 증가
print(...format(number))
반복이 끝나면 몇 번 반복했는지 출력
📝 문제21] 10부터 1까지 while
문으로 출력해보세요.
✅ 정답 코드:
num = 10
while num >= 1:
print(num)
num -= 1
🖨️ 출력 결과:
10
9
8
7
6
5
4
3
2
1
🔍 해설:
num
은 10부터 시작num >= 1
조건이 참인 동안 반복- 반복할 때마다
num
을 1씩 감소 → 1까지 출력됨
📝 문제22] 사용자에게 계속 숫자를 입력받다가 0
을 입력하면 종료하기
✅ 정답 코드:
num = -1
while num != 0:
num = int(input("숫자 입력 (0 입력 시 종료): "))
🖨️ 출력 예시:
숫자 입력 (0 입력 시 종료): 3
숫자 입력 (0 입력 시 종료): 7
숫자 입력 (0 입력 시 종료): 0
🔍 해설:
- 초기값을
0
이 아닌 값으로 설정해야 반복이 시작됨 input()
으로 값을 계속 입력받고,int()
로 숫자로 변환- 입력값이
0
이면 조건num != 0
이 거짓이 되어 반복 종료
📝 문제23] 사용자에게 숫자를 계속 입력받아 짝수만 누적 합산하세요.
0
을 입력하면 프로그램을 종료하고, 총 입력된 수의 개수와 짝수 누적합을 출력하세요.
🖨️ 예시 실행:
숫자 입력 (0 입력 시 종료): 5
숫자 입력 (0 입력 시 종료): 8
숫자 입력 (0 입력 시 종료): 3
숫자 입력 (0 입력 시 종료): 10
숫자 입력 (0 입력 시 종료): 0
총 4개의 숫자를 입력했습니다.
짝수의 합계는 18입니다.
🔍 해설:
count
는 입력된 숫자의 총 개수 (0
제외)num % 2 == 0
조건을 통해 짝수만 골라 누적break
는0
이 입력되면 즉시 반복 종료- 반복 종료 후 요약 결과를 출력 (실무 보고서 스타일)